import OpenAI from "openai";
import path from 'path';
import fs from "fs"
import { Jieba } from '@node-rs/jieba'
import { dict } from '@node-rs/jieba/dict'

// 初始化结巴分词
const jieba = Jieba.withDict(dict)

// 设置停用词
const stopWords = new Set([
    '的', '了', '和', '是', '就', '都', '而', '及', '与', '这', '那', '有', '在',
    '中', '上', '下', '为', '以', '到', '从', '向', '对', '等', '或', '但', '并',
    '很', '又', '也', '只', '还', '把', '被', '让', '给', '使', '令', '由', '于',
    '因', '所', '其', '它', '她', '他', '我', '你', '您', '们', '它', '它们', '她',
    '她们', '他', '他们', '我', '我们', '你', '你们', '您', '您们', '这', '这些',
    '那', '那些', '哪', '哪些', '谁', '什么', '为什么', '怎么', '如何', '多少',
    '几', '几时', '何时', '哪里', '哪儿', '什么', '为什么', '怎么', '如何', '多少',
    '几', '几时', '何时', '哪里', '哪儿', '什么', '为什么', '怎么', '如何', '多少',
    '：','，','。','《','》','、','—'
]);

/**
 * 处理文本文件并进行分词
 * @param sourceDir - 源文件目录路径
 * @returns Map<string, string[]> - 文件名到分词结果的映射
 */
function processTextFileds(sourceDir: string): Map<string, string[]> {
    try {
        const result = new Map<string, string[]>();
        
        // 确保目录存在
        if (!fs.existsSync(sourceDir)) {
            console.log(`Creating directory: ${sourceDir}`);
            fs.mkdirSync(sourceDir, { recursive: true });
            return result;
        }

        // 读取目录中的所有文件
        const files = fs.readdirSync(sourceDir);
        
        // 处理每个txt文件
        for (const file of files) {
            if (file.endsWith(".txt")) {
                const filePath = path.join(sourceDir, file);
                const content = fs.readFileSync(filePath, 'utf-8');
                
                // 使用结巴分词处理文本，并过滤停用词
                const words = jieba.cut(content, false)
                    .filter(word => !stopWords.has(word) && word.trim().length > 0);
                
                result.set(file, words);
                console.log(`Processed file: ${file}, found ${words.length} words`);
            }
        }
        
        return result;
    } catch (error) {
        console.error('Error processing text files:', error);
        throw error;
    }
}

/**
 * 将分词结果保存到文本文件
 * @param result - 分词结果映射
 * @param outputDir - 输出目录路径
 */
function saveResultsToFile(result: Map<string, string[]>, outputDir: string): void {
    try {
        // 确保输出目录存在
        if (!fs.existsSync(outputDir)) {
            fs.mkdirSync(outputDir, { recursive: true });
        }

        // 创建输出文件
        const outputPath = path.join(outputDir, 'segmented_text.txt');
        let content = '';

        // 将每个文件的分词结果写入
        result.forEach((words, filename) => {
            content += `\n=== ${filename} ===\n`;
            content += words.join(' ') + '\n';
        });

        // 写入文件
        fs.writeFileSync(outputPath, content, 'utf-8');
        console.log(`Results saved to: ${outputPath}`);
    } catch (error) {
        console.error('Error saving results:', error);
        throw error;
    }
}

/**
 * 示例函数：处理三国演义文本并进行分词
 */
export function embeddingSample() {
    const sourceDir = path.join(__dirname, './source/three_kingdoms');
    const outputDir = path.join(__dirname, './output/three_kingdoms');
    
    // 处理文本文件
    const result = processTextFileds(sourceDir);
    
    // 保存结果到文件
    saveResultsToFile(result, outputDir);
    
    console.log('Processing completed.');
}